//
//  YXAEApplyer.h
//  MiaoPaiVideoKitSample
//
//  Created by Makarov on 2017/6/5.
//  Copyright © 2017年 Makarov. All rights reserved.
//

#import <AVFoundation/AVFoundation.h>
#import "YXVideoEffectModel.h"

@interface YXAEApplyer : NSObject


/**
 是否启用 默认 YES
 */
@property (nonatomic, assign) BOOL enable;


/**
 使用一个效果 model

 @param model 将要使用的效果 model
 */
- (void)usingAEModel:(YXVideoEffectModel *)model;
@property (nonatomic, readonly) YXVideoEffectModel *model;


/**
 私有接口

 @param sourceTime time
 */
- (void)startSessionAtSourceTime:(CMTime)sourceTime;
- (void)endSession;


/**
 效果应用

 @param sampleBuffer camera采样的 sampleBuffer
 @param outputTexture 应用效果后的 输出纹理 可选 没有则使用 NULL
 @param outputBuffer 应用效果后的 输出 buffer 可选 没有则使用 NULL
 */
- (void)applyWithInputBuffer:(CMSampleBufferRef)sampleBuffer
          orGetOutputTexture:(GLuint *)outputTexture
           orGetOutputBuffer:(CVPixelBufferRef *)outputBuffer;


/**
 效果应用

 @param pixelBuffer sampleBuffer的 ImageBuffer
 @param texture 输入纹理 可选 没有则使用 0
 @param width 输入纹理宽 可选 没有则使用 0
 @param height 输入纹理高 可选 没有则使用 0
 @param time bufferTime 可选 没有则使用 kCMTimeZero
 @param outputTexture 应用效果后的 输出纹理 可选 没有则使用 NULL
 @param outputBuffer 应用效果后的 输出 buffer 可选 没有则使用 NULL
 */
- (void)applyWithInputBuffer:(CVPixelBufferRef)pixelBuffer
              orInputTexture:(GLuint)texture
              withImageWidth:(GLuint)width
             withImageHeight:(GLuint)height
                        time:(CMTime)time
         orGetOutputTexture:(GLuint *)outputTexture
                orGetOutputBuffer:(CVPixelBufferRef *)outputBuffer;



- (void)updatef:(float *)value size:(size_t)size at:(NSString *)name;
- (void)updatei:(int *)value size:(size_t)size at:(NSString *)name;

- (UIImage *)GetOutputImageWith:(GLuint)texture width:(GLuint)width height:(GLuint)height;

@property (nonatomic, assign) BOOL asTextureDownloader;


@end
